package com.atguigu.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

/**
 * @author 伟哥
 * @date 2021-05-25 23:29
 */
@Controller
public class FileUploadController {

    /**
     * 单文件上传
     * @param username 用户名
     * @param file 用户的头像
     * @param model 隐含模型，用来给前端回写消息
     * @return 回到index页面，继续测试文件上传
     */
    @RequestMapping("/uploadAlone")
    public String uploadFile(@RequestParam(value = "username",required = false)String username,
                             @RequestParam("headerimg")MultipartFile file,
                             Model model){
        /*
        获取 用户上传的数据
            1、获取【普通项】：获取username
            使用@RequestParam【不用这个注解，默认也是获取username信息】
            @RequestParam(value = "username",required = false)String username

            2、获取【文件项】
            使用@RequestParam【不用这个注解，默认也是获取username信息】
            @RequestParam("headerimg")MultipartFile file 封装了当前文件的信息，可以直接保存
         */

        /*
        * 拿到文件之后的操作
        * */
        System.out.println("上传文件的信息：");
        System.out.println("文件项的前端id："+file.getName());
        System.out.println("文件的名字："+file.getOriginalFilename());
        System.out.println("文件的大小："+file.getSize());
        System.out.println("文件的类型："+file.getContentType());

        //文件保存
        try {
            file.transferTo(new File("C:\\Users\\HelloKitty\\Desktop\\"+file.getOriginalFilename()));
            model.addAttribute("msg","上传成功！");
        } catch (Exception e) {
            model.addAttribute("msg","上传失败！");
        }

        return "forward:/index.jsp";
    }
    /**
     * 多文件上传
     * @param username 用户名
     * @param multipartFile 【多文件】
     * @param model 隐含模型，用来给前端回写消息
     * @return 回到index页面，继续测试文件上传
     *
     * 注意：★★★
     *      参数@RequestParam("headerimg")MultipartFile[] multipartFile
     *      获取的是前端文件项，都是headerimg的值
     *      如果，前端文件项目，不是headerimg，则在方法入参处，继续添加前端指定的id即可
     */
    @RequestMapping("/uploadMulti")
    public String uploadFile(@RequestParam(value = "username",required = false)String username,
                             @RequestParam("headerimg")MultipartFile[] multipartFile,
                             Model model){
       // 遍历文件项
        for (MultipartFile file : multipartFile) {
            // 判断文件项，是否是空的。也就是说，有些项，用户没有上传
            if(!file.isEmpty()){
                System.out.println("上传文件的信息：");
                System.out.println("文件项的前端id："+file.getName());
                System.out.println("文件的名字："+file.getOriginalFilename());
                System.out.println("文件的大小："+file.getSize());
                System.out.println("文件的类型："+file.getContentType());

                //文件保存
                try {
                    file.transferTo(new File("D:\\Users\\HelloKitty\\Desktop\\"+file.getOriginalFilename()));
                    model.addAttribute("msg","上传成功！");
                } catch (Exception e) {
                    model.addAttribute("msg","上传失败！");
                }

                System.out.println("============");
            }

        }

        return "forward:/index.jsp";
    }

}
